home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / lib / rhythmbox / plugins / lyrics / WinampcnParser.pyc (.txt) < prev   
Encoding:
Python Compiled Bytecode  |  2009-04-20  |  2.8 KB  |  82 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import sys
  5. import urllib
  6. import gettext
  7. import re
  8. import rb
  9. from xml.dom import minidom
  10.  
  11. def detect_charset(s):
  12.     charsets = ('iso-8859-1', 'gbk', 'utf-8')
  13.     for charset in charsets:
  14.         
  15.         try:
  16.             return unicode(unicode(s, 'utf-8').encode(charset), 'gbk')
  17.         continue
  18.         continue
  19.         continue
  20.  
  21.     
  22.     return s
  23.  
  24.  
  25. class WinampcnParser(object):
  26.     
  27.     def __init__(self, artist, title):
  28.         self.artist = artist
  29.         self.title = title
  30.  
  31.     
  32.     def search(self, callback, *data):
  33.         title_encode = urllib.quote(detect_charset(self.title).encode('gbk').replace(' ', ''))
  34.         artist_encode = urllib.quote(detect_charset(self.artist).encode('gbk').replace(' ', ''))
  35.         url = 'http://www.winampcn.com/lyrictransfer/get.aspx?song=%s&artist=%s&lsong=%s&Datetime=20060601' % (title_encode, artist_encode, title_encode)
  36.         loader = rb.Loader()
  37.         loader.get_url(url, self.got_lyrics, callback, *data)
  38.  
  39.     
  40.     def got_lyrics(self, xmltext, callback, *data):
  41.         if xmltext is None:
  42.             callback(None, *data)
  43.             return None
  44.         
  45.         try:
  46.             xmltext = xmltext.decode('gbk').encode('UTF-8')
  47.             xmltext = xmltext.replace('encoding="gb2312"', 'encoding="UTF-8"')
  48.             xmldoc = minidom.parseString(xmltext)
  49.             root = xmldoc.documentElement
  50.             lrcurl = root.getElementsByTagName('LyricUrl')[0].childNodes[0].data
  51.             if lrcurl is None:
  52.                 callback(xmltext, *data)
  53.                 return None
  54.             lrcurl_encode = urllib.quote(detect_charset(lrcurl).encode('gbk'))
  55.             lrcurl_encode = lrcurl_encode.replace('%3A', ':')
  56.             loader = rb.Loader()
  57.             loader.get_url(lrcurl_encode, self.parse_lyrics, callback, *data)
  58.         except:
  59.             xmltext is None
  60.             callback(None, *data)
  61.  
  62.  
  63.     
  64.     def parse_lyrics(self, lyrics, callback, *data):
  65.         if lyrics is None:
  66.             callback(None, *data)
  67.             return None
  68.         lrcplaintext = lyrics
  69.         
  70.         try:
  71.             lrcplaintext = re.sub('\\[.*?\\]', '', lrcplaintext)
  72.             lrcplaintext = lrcplaintext.decode('gbk').encode('UTF-8')
  73.         except:
  74.             lyrics is None
  75.             callback(lrcplaintext, *data)
  76.             return None
  77.  
  78.         lrcplaintext += '\n\nLyrics provided by winampcn.com'
  79.         callback(lrcplaintext, *data)
  80.  
  81.  
  82.